package com.ting.mybatis.proxy;

import com.ting.mybatis.session.MySqlSession;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;

/**
 * @Author: ting
 */
public class MyMapperProxy implements InvocationHandler {
    private MySqlSession mySqlSessionsession;

    public MyMapperProxy(MySqlSession mySqlSessionsession) {
        this.mySqlSessionsession = mySqlSessionsession;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        //判断方法的返回类型，也就是selectByPrimaryKey方法的返回类型
        Class clazz = method.getReturnType();


        //判断返回类型是不是集合类的子类
        if(Collection.class.isAssignableFrom(clazz)){
              return null;
        }
        //判断返回类型是不是Map类的子类
        else if(Map.class.isAssignableFrom(clazz)){
             return null;
        }
        else{
            //method方法就代表selectByPrimaryKey方法,method.getDeclaringClass().getName()获取这个方法所声明
            //的类的包名和类名+查询id（就是方法名）
            String sqlId=method.getDeclaringClass().getName()+"."+method.getName();
            //用session去查数据
            return mySqlSessionsession.selectOne(sqlId,args==null?null:args[0]);
        }



    }
}
